package io.jt808.proto.cmd;

import io.norland.buffer.AutoBuffer;
import io.norland.annotations.Proto;
import io.norland.proto.IProto;
import lombok.Data;

import java.util.ArrayList;
import java.util.List;

/**
 * 设置电话本
 */
@Proto("8401")
@Data
public class JT8401 implements IProto {
    /**
     * 设置类型,0：删除终端上所有存储的联系人；  1：表示更新电话本（删除终端中已有全部联系人并追加消息中的联系人）； 2：表示追加电话本； 3：表示修改电话本（以联系人为索引）
     */
    private byte settingType;
    /**
     * 联系人总数
     */
    private byte phoneNosCount;
    /**
     * 联系人项
     */
    private List<PhoneNoItem> contacts;

    public byte[] writeToBytes() {
        AutoBuffer buffer = new AutoBuffer();
        buffer.writeByte(settingType);
        buffer.writeByte(phoneNosCount);
        for (PhoneNoItem item : contacts) {
            buffer.writeByte(item.dailFlag);
            buffer.writeByte(item.phoneNoLength);
            buffer.writeString(item.phoneNo);
            buffer.writeByte(item.contactLength);
            buffer.writeGbkString(item.contact, item.contactLength);
        }
        return buffer.array();
    }

    public void readFromBuf(AutoBuffer buff) {
        settingType = buff.readByte();
        phoneNosCount = buff.readByte();
        contacts = new ArrayList<>();
        while (buff.isReadable()) {
            PhoneNoItem item = new PhoneNoItem();
            item.dailFlag = buff.readByte();
            item.phoneNoLength = buff.readByte();
            item.phoneNo = buff.readString(item.phoneNoLength);
            item.contactLength = buff.readByte();
            item.contact = buff.readGbkString(item.contactLength);
            contacts.add(item);
        }
    }

    public class PhoneNoItem {
        /**
         * 标志,1：呼入；2：呼出；3：呼入/呼出
         */
        private byte dailFlag;
        /**
         * 号码长度
         */
        private byte phoneNoLength;
        /**
         * 电话号码
         */
        private String phoneNo;
        /**
         * 联系人长度
         */
        private byte contactLength;
        /**
         * 联系人
         */
        private String contact;
    }

//    public static void main(String[] args) {
//        byte[] bytes = new byte[]{
//                0x00,
//                0x01,
//                0x01,
//                0x04,
//                0x33, 0x34, 0x34, 0x34,
//                0x05,
//                (byte) 0xBA, (byte) 0xBD, (byte) 0xD4, (byte) 0xBA,
//                0x38,
//        };
//        JT8401 jt8301 = new JT8401();
//        jt8301.readFromBuf(new AutoBuffer(bytes));
//        System.out.println(new String(bytes).equals(new String(jt8301.writeToBytes())));
//    }
}